package librairies.liste.interfaces;

/**
 * Definition de l'iterateur.
 * 
 * @author mlozach
 * @param <E> type de l'element se trouvant dans l'iterateur
 */
public interface IIterateur<E> 
{
	/**
	 * permet de dire si il y a un geton suivant.
	 * @return <true> si il y a un suivant.
	 */
	 boolean hasNext();
	 
	 /**
	  * permet de dire si il y a un geton precedent.
	  * @return <true> si il y a un precedent.
	  */
	 boolean hasPrevious();
	 
	 /**
	  * permet de recuperer le prochain element.
	  * @return le prochain element.
	  * @throws java.util.NoSuchElementException.
	  */
	 E next() throws java.util.NoSuchElementException;
	 
	 /**
	  * permet de recuperer l'element precedent.
	  * @return l element precedent.
	  * @throws java.util.NoSuchElementException.
	  */
	 E previous() throws java.util.NoSuchElementException;
	 
	 /**
	  * permet de retirer l'element courant.
	  * @throws IllegalStateException.
	  */
	 void remove() throws IllegalStateException;
	 
	 /**
	  * permet de modifier la valeur de l'element courant.
	  * @param e la nouvelle valeur.
	  * @throws IllegalStateException
	  */
	 void set(E e) throws IllegalStateException;
}
